home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / exampleCode / inventor / SpaceballViewer / MyFloatCBList.c++ < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-02  |  3.8 KB  |  132 lines

  1. /*
  2.  * Copyright (c) 1991-94 Silicon Graphics, Inc.
  3.  *
  4.  * Permission to use, copy, modify, distribute, and sell this software and
  5.  * its documentation for any purpose is hereby granted without fee, provided
  6.  * that the name of Silicon Graphics may not be used in any advertising or
  7.  * publicity relating to the software without the specific, prior written
  8.  * permission of Silicon Graphics.
  9.  *
  10.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
  11.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
  12.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  13.  *
  14.  * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
  15.  * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
  16.  * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE
  17.  * POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN
  18.  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  19.  */
  20. /*
  21.  * Copyright (C) 1991   Silicon Graphics, Inc.
  22.  *
  23.  _______________________________________________________________________
  24.  ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
  25.  |
  26.  |   $Revision: 1.5 $
  27.  |
  28.  |   Classes:
  29.  |    MyFloatCallbackList
  30.  |
  31.  |   Author(s): David Mott
  32.  |
  33.  ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
  34.  _______________________________________________________________________
  35.  */
  36.  
  37. #include "MyFloatCallbackList.h"
  38.  
  39. typedef struct SoCallbackStruct {
  40.     MyFloatCallbackListCB   *func;
  41.     void            *userData;
  42. };
  43.  
  44. //////////////////////////////////////////////////////////////////////////////
  45. //
  46. //  Constructor
  47. //
  48. MyFloatCallbackList::MyFloatCallbackList()
  49. //
  50. //////////////////////////////////////////////////////////////////////////////
  51. {
  52. }
  53.  
  54. //////////////////////////////////////////////////////////////////////////////
  55. //
  56. //  Destructor
  57. //
  58. MyFloatCallbackList::~MyFloatCallbackList()
  59. //
  60. //////////////////////////////////////////////////////////////////////////////
  61. {
  62.     int len = list.getLength();
  63.     
  64.     for (int i = 0; i < len; i++) {
  65.         delete list[i];
  66.     }
  67. }
  68.  
  69. //////////////////////////////////////////////////////////////////////////////
  70. //
  71. //  addCallback - adds the function f to the callback list, along with
  72. //  userData. At invocation, f will be passed userData, along with callback
  73. //  specific data.
  74. //
  75. void
  76. MyFloatCallbackList::addCallback(MyFloatCallbackListCB *f, void *userData)
  77. //
  78. //////////////////////////////////////////////////////////////////////////////
  79. {
  80.     if (f == NULL)
  81.         return;
  82.     
  83.     SoCallbackStruct *cb = new SoCallbackStruct;
  84.     cb->func = f;
  85.     cb->userData = userData;
  86.     
  87.     list.append(cb);
  88. }   
  89.  
  90. //////////////////////////////////////////////////////////////////////////////
  91. //
  92. //  removeCallback - removes the function f associated with userData from the.
  93. //  callback list.
  94. //
  95. void
  96. MyFloatCallbackList::removeCallback(MyFloatCallbackListCB *f, void *userData)
  97. //
  98. //////////////////////////////////////////////////////////////////////////////
  99. {
  100.     int len = list.getLength();
  101.     SoCallbackStruct *cb;
  102.     int found = 0;
  103.     
  104.     for (int i = 0; (i < len) && (! found); i++) {
  105.     cb = (SoCallbackStruct *) list[i];
  106.     if ((cb->func == f) && (cb->userData == userData)) {
  107.         list.remove(i);
  108.         delete cb;
  109.         found = 1;
  110.     }
  111.     }
  112. }   
  113.  
  114. //////////////////////////////////////////////////////////////////////////////
  115. //
  116. //  invokeCallbacks - invokes each callback func in the list, passing.
  117. //  userData, and callbackData as the parameters.
  118. //
  119. void
  120. MyFloatCallbackList::invokeCallbacks(float callbackData)
  121. //
  122. //////////////////////////////////////////////////////////////////////////////
  123. {
  124.     int len = list.getLength();
  125.     SoCallbackStruct *cb;
  126.     
  127.     for (int i = 0; i < len; i++) {
  128.     cb = (SoCallbackStruct *) list[i];
  129.     (*cb->func) (cb->userData, callbackData);
  130.     }
  131. }   
  132.